package org.example.curriculum_design_6_16.service;

public interface RedisService {

    /**
     * 设置验证码到缓存中，默认过期时间为5分钟。
     *
     * @param recipient 收件人邮箱地址
     * @param mailCode 需要缓存的验证码
     * @param expirationTime 验证码的过期时间，单位为秒
     */
    void setMailCode(String recipient, String mailCode, long expirationTime);

    /**
     * 获取缓存中的验证码。
     *
     * @param mailCode 唯一的验证码标识符（如验证码的值或对应的键）
     * @return 如果找到缓存中的验证码，则返回验证码，否则返回 null
     */
    String getMailCode(String mailCode);

    /**
     * 删除指定的验证码缓存。
     *
     * @param mailCode 要删除的验证码标识符
     */
    void delMailCode(String mailCode);

    /**
     * 设置JWT令牌到缓存中，指定过期时间。
     *
     * @param jwtToken 需要缓存的JWT令牌
     * @param expirationTime JWT令牌的过期时间，单位为秒
     */
    void setJwtToken(String jwtToken, String userId, long expirationTime);

    /**
     * 删除指定的JWT令牌缓存。
     *
     * @param jwtToken 要删除的JWT令牌
     */
    void delJwtToken(String jwtToken);

    /**
     * 生成新的JWT令牌。
     *
     * @return 新生成的JWT令牌
     */
    String newJwtToken(String userId);

    /**
     * 根据key获取缓存中的值。
     *
     * @param key 缓存的键
     * @return 缓存中的值，如果未找到则返回 null
     */
    String get(String key);
}
